热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

题目|思路_LeetCode刷题笔记数据结构day2

篇首语:本文由编程笔记#小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day2相关的知识,希望对你有一定的参考价值。文章目录

篇首语:本文由编程笔记#小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day2相关的知识,希望对你有一定的参考价值。



文章目录


  • LeetCode刷题笔记-数据结构-day2
    • 75.颜色分类
      • 1.题目描述
      • 2.解题思路
      • 3.代码

    • 56.合并区间
      • 1.题目描述
      • 2.解题思路
      • 3.代码

    • 706.设计哈希映射
      • 1.题目描述
      • 2.解题思路
      • 3.代码




LeetCode刷题笔记-数据结构-day2

75.颜色分类


1.题目描述



原题链接:75. 颜色分类



2.解题思路

算法:双指针算法

题目要求:不使用内置排序函数。使用常数空间

具体思路:


  1. 假设数组长度为n。使用三个指针 i、j、k,初始化i=0、j=n-1、k=0

  2. k开始遍历,分三种情况:


    1. 如果a[k]==0swap(a[i++],a[k++]);

      这里a[i]一定是不等于2的。因为如果等于2,会执行第二种操作,所以不可能为2

      所以a[i]==1,a[k]==0,因此交换后,ik都可以往后移一位

    2. 如果a[k]==2swap(a[j--],a[k]);

      因为这里a[j]的值可能也是2,所有这里k交换后不能往后移。

    3. 如果a[k]==1k++;


3.代码

class Solution
public:
void sortColors(vector<int>& a)
int n&#61;a.size();
int i&#61;0,j&#61;n-1,k&#61;0;
while(k<&#61;j)
if(a[k]&#61;&#61;0) swap(a[i&#43;&#43;],a[k&#43;&#43;]);
else if(a[k]&#61;&#61;2) swap(a[j--],a[k]);
else k&#43;&#43;;


;

56.合并区间


1.题目描述



原题链接&#xff1a;56. 合并区间



2.解题思路

直接套用区间合并的模板即可&#xff1a;

// 将所有存在交集的区间合并
void merge(vector<PII> &segs)

vector<PII> res;
sort(segs.begin(), segs.end());
int st &#61; -2e9, ed &#61; -2e9;
for (auto seg : segs)
if (ed < seg.first)

if (st !&#61; -2e9) res.push_back(st, ed);
st &#61; seg.first, ed &#61; seg.second;

else ed &#61; max(ed, seg.second);
if (st !&#61; -2e9) res.push_back(st, ed);
segs &#61; res;


3.代码

class Solution
public:
vector<vector<int>> merge(vector<vector<int>>& v)
vector<vector<int>> res;
sort(v.begin(),v.end());
int st&#61;-2e9,ed&#61;-2e9;
for(auto x:v)
if(ed<x[0])
if(st!&#61;-2e9) res.push_back(st,ed);
st&#61;x[0],ed&#61;x[1];

else ed&#61;max(x[1],ed);

if(st!&#61;-2e9) res.push_back(st,ed);
return res;

;

706.设计哈希映射



原题链接&#xff1a;706. 设计哈希映射



1.题目描述


2.解题思路

题目要求&#xff1a;不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;

具体思路&#xff1a;

哈希表的基本思想都是先开一个大数组&#xff0c;然后用某种哈希函数将key映射到数组的下标空间。不同算法的区别在于如何处理下标冲突&#xff0c;即当两个不同的key被映射到同一下标时。我们这里使用拉链法解决冲突。这里的链表我们可以用vector实现。


  • 对于put(key, value)操作&#xff0c;我们先求出key的哈希值&#xff0c;然后遍历该位置上的链表&#xff0c;如果链表中包含key&#xff0c;则更新其对应的value&#xff1b;如果链表中不包含key&#xff0c;则直接将&#xff08;key&#xff0c;value&#xff09;插入该链表中。
  • 对于get(key)操作&#xff0c;求出key对应的哈希值后&#xff0c;遍历该位置上的链表&#xff0c;如果key在链表中&#xff0c;则返回其对应的value&#xff0c;否则返回-1。
  • 对于remove(key)&#xff0c;求出key的哈希值后&#xff0c;遍历该位置上的链表&#xff0c;如果key在链表中&#xff0c;则将其删除。

3.代码

const int N&#61;1e4&#43;3;
class MyHashMap
public:
vector<pair<int,int>> h[N];
MyHashMap()

int find(vector<pair<int,int>> &h,int key)
for(int i&#61;0;i<h.size();i&#43;&#43;)
if(h[i].first&#61;&#61;key) return i;
return -1;

void put(int key, int value)
int t&#61;key%N;
int k&#61;find(h[t],key);
if(k&#61;&#61;-1) h[t].push_back(key,value);
else h[t][k].second&#61;value;


int get(int key)
int t&#61;key%N;
int k&#61;find(h[t],key);
if(k&#61;&#61;-1) return -1;
return h[t][k].second;


void remove(int key)
int t&#61;key%N;
int k&#61;find(h[t],key);
if(k!&#61;-1) h[t].erase(h[t].begin()&#43;k);

;


推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 从相邻元素对还原数组的解题思路和代码
    本文介绍了从相邻元素对还原数组的解题思路和代码。思路是使用HashMap存放邻接关系,并找出起始点,然后依次取。代码使用了HashMap来存放起始点所在的adjacentPairs中的位置,并对重复的起始点进行处理。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 20210304力扣 根据前序遍历和中序遍历确定二叉树 快速排序思想
    力扣根据前序遍历和中序遍历确定二叉树基本思路前序遍历确定根节点是哪个(第一个就是根节点)中序遍历根据已知根节点确定左右子树的元素组成根节点左左子树根节点右右子树再根据前序遍历确定左 ... [详细]
author-avatar
爱情只有确定键没有取消键_874
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有